summaryrefslogtreecommitdiff
path: root/cleopatre/devkit/mt7601udrv
diff options
context:
space:
mode:
Diffstat (limited to 'cleopatre/devkit/mt7601udrv')
-rw-r--r--cleopatre/devkit/mt7601udrv/RT2870AP.dat1
-rw-r--r--cleopatre/devkit/mt7601udrv/ap/ap_cfg.c61
-rw-r--r--cleopatre/devkit/mt7601udrv/common/cmm_info.c238
-rw-r--r--cleopatre/devkit/mt7601udrv/include/ap_cfg.h15
-rw-r--r--cleopatre/devkit/mt7601udrv/include/oid.h37
-rw-r--r--cleopatre/devkit/mt7601udrv/include/os/rt_os.h9
-rw-r--r--cleopatre/devkit/mt7601udrv/include/rtmp_cmd.h8
-rw-r--r--cleopatre/devkit/mt7601udrv/os/linux/ap_ioctl.c21
-rw-r--r--cleopatre/devkit/mt7601udrv/os/linux/config.mk10
9 files changed, 398 insertions, 2 deletions
diff --git a/cleopatre/devkit/mt7601udrv/RT2870AP.dat b/cleopatre/devkit/mt7601udrv/RT2870AP.dat
index c5f4951575..402eb47b45 100644
--- a/cleopatre/devkit/mt7601udrv/RT2870AP.dat
+++ b/cleopatre/devkit/mt7601udrv/RT2870AP.dat
@@ -108,6 +108,7 @@ MeshEncrypType=NONE
MeshWPAKEY=
MeshDefaultkey=1
MeshWEPKEY=
+WscConfStatus=1
WscManufacturer=
WscModelName=
WscDeviceName=
diff --git a/cleopatre/devkit/mt7601udrv/ap/ap_cfg.c b/cleopatre/devkit/mt7601udrv/ap/ap_cfg.c
index e90f7776d3..33f0c783fb 100644
--- a/cleopatre/devkit/mt7601udrv/ap/ap_cfg.c
+++ b/cleopatre/devkit/mt7601udrv/ap/ap_cfg.c
@@ -7509,6 +7509,11 @@ VOID RTMPIoctlStatistics(
#ifdef RTMP_EFUSE_SUPPORT
UINT efusefreenum=0;
#endif /* RTMP_EFUSE_SUPPORT */
+#ifdef P1905_LINK_METRICS
+ INT j;
+ ULONG DataRate;
+ UCHAR rf_bw, ext_ch;
+#endif
/* msg = (PSTRING)kmalloc(sizeof(CHAR)*(2048), MEM_ALLOC_FLAG); */
os_alloc_mem(pAd, (UCHAR **)&msg, sizeof(CHAR)*(2048));
@@ -7672,6 +7677,41 @@ VOID RTMPIoctlStatistics(
sprintf(msg+strlen(msg), "efuseFreeNumber = %d\n", efusefreenum);
}
#endif /* RTMP_EFUSE_SUPPORT */
+#ifdef P1905_LINK_METRICS
+ sprintf(msg+strlen(msg), "\n");
+
+ for (j=0; j<MAX_LEN_OF_MAC_TABLE; j++)
+ {
+ PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.Content[j];
+ if ((IS_ENTRY_CLIENT(pEntry) || IS_ENTRY_APCLI(pEntry))
+ && (pEntry->Sst == SST_ASSOC))
+ {
+ sprintf(msg+strlen(msg), "sta mac = %.2x %.2x %.2x %.2x %.2x %.2x\n",
+ pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], pEntry->Addr[3],pEntry->Addr[4],pEntry->Addr[5]);
+ sprintf(msg+strlen(msg), "--TxPacket = %ld\n", (ULONG)pEntry->TxPackets.QuadPart);
+ sprintf(msg+strlen(msg), "--RxPacket = %ld\n", (ULONG)pEntry->RxPackets.QuadPart);
+
+ getRate(pEntry->HTPhyMode, &DataRate);
+ sprintf(msg+strlen(msg), "--Rate = %ld\n", DataRate);
+ }
+ }
+ sprintf(msg+strlen(msg), "\n");
+
+ if(get_ht_cent_ch(pAd, &rf_bw, &ext_ch) == FALSE)
+ {
+ rf_bw = BW_20;
+ pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
+
+ sprintf(msg+strlen(msg), "CurrentBW = %d\n", rf_bw);
+ sprintf(msg+strlen(msg), "CenterFreq = %d\n", pAd->CommonCfg.CentralChannel);
+ }
+ else
+ {
+ sprintf(msg+strlen(msg), "CurrentBW = %d\n", rf_bw);
+ sprintf(msg+strlen(msg), "CenterFreq = %d\n", pAd->CommonCfg.CentralChannel);
+ }
+#endif
+
/* Copy the information into the user buffer */
wrq->u.data.length = strlen(msg);
Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length);
@@ -11258,6 +11298,27 @@ INT RTMP_AP_IoctlHandle(
break;
#endif /* HOSTAPD_SUPPORT */
+#ifdef P1905_AP_AUTO_CONFIGURED
+ case CMD_RTPRIV_IOCTL_GET_DH_PUB_KEY:
+ Get_DH_Pub_Key(wrq);
+ break;
+ case CMD_RTPRIV_IOCTL_GET_DH_SECU_KEY:
+ Get_DH_Secu_Key(wrq);
+ break;
+ case CMD_RTPRIV_IOCTL_GET_AUTH_KEYWRAP_KEY:
+ Get_Auth_Keywrap_Key(wrq);
+ break;
+ case CMD_RTPRIV_IOCTL_GET_KWA_VALUE:
+ Get_KWA_Value(wrq);
+ break;
+ case CMD_RTPRIV_IOCTL_GET_AES_ENCRYPT_VALUE:
+ Get_AES_Encrypt_Value(wrq);
+ break;
+ case CMD_RTPRIV_IOCTL_GET_AES_DECRYPT_VALUE:
+ Get_AES_Decrypt_Value(wrq);
+ break;
+#endif
+
default:
Status = RTMP_COM_IoctlHandle(pAd, wrq, cmd, subcmd, pData, Data);
break;
diff --git a/cleopatre/devkit/mt7601udrv/common/cmm_info.c b/cleopatre/devkit/mt7601udrv/common/cmm_info.c
index 4d69674a66..439c178855 100644
--- a/cleopatre/devkit/mt7601udrv/common/cmm_info.c
+++ b/cleopatre/devkit/mt7601udrv/common/cmm_info.c
@@ -25,7 +25,14 @@
#include "rt_config.h"
-
+#ifdef P1905_AP_AUTO_CONFIGURED
+extern UINT8 WPS_DH_G_VALUE[1];
+extern UINT8 WPS_DH_P_VALUE[192];
+extern int WscDeriveKey (
+ unsigned char *kdk, unsigned int kdk_len,
+ unsigned char *prsnlString, unsigned int str_len,
+ unsigned char *key, unsigned int keyBits );
+#endif
/*
==========================================================================
@@ -6149,3 +6156,232 @@ INT RTMPShowCfgValue(
return Status;
}
+#ifdef P1905_AP_AUTO_CONFIGURED
+VOID Get_DH_Pub_Key(
+ IN RTMP_IOCTL_INPUT_STRUCT *wrq)
+{
+ DH_TABLE *pDHTab = NULL;
+ UINT pub_key_len = 0;
+ INT status;
+
+ os_alloc_mem(NULL, (UCHAR **)&pDHTab, sizeof(DH_TABLE));
+ if (pDHTab == NULL)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: Allocate memory fail!!!\n", __FUNCTION__));
+ return;
+ }
+
+ status = copy_from_user(pDHTab, wrq->u.data.pointer, wrq->u.data.length);
+ if(status)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: Copy from user error!!!\n", __FUNCTION__));
+ os_free_mem(NULL, pDHTab);
+ return;
+ }
+
+ pub_key_len = sizeof(pDHTab->pub_key);
+ RT_DH_PublicKey_Generate(
+ WPS_DH_G_VALUE, sizeof(WPS_DH_G_VALUE),
+ WPS_DH_P_VALUE, sizeof(WPS_DH_P_VALUE),
+ pDHTab->priv_key, sizeof(pDHTab->priv_key),
+ pDHTab->pub_key, &pub_key_len);
+
+ wrq->u.data.length = sizeof(DH_TABLE);
+ if (copy_to_user(wrq->u.data.pointer, pDHTab, wrq->u.data.length))
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: copy_to_user() fail\n", __FUNCTION__));
+ }
+
+ os_free_mem(NULL, pDHTab);
+}
+
+VOID Get_DH_Secu_Key(
+ IN RTMP_IOCTL_INPUT_STRUCT *wrq)
+{
+ DH_TABLE *pDHTab = NULL;
+ INT status;
+ UINT dh_len;
+
+ os_alloc_mem(NULL, (UCHAR **)&pDHTab, sizeof(DH_TABLE));
+ if (pDHTab == NULL)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: Allocate memory fail!!!\n", __FUNCTION__));
+ return;
+ }
+
+ status = copy_from_user(pDHTab, wrq->u.data.pointer, wrq->u.data.length);
+ if(status)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: Copy from user error!!!\n", __FUNCTION__));
+ os_free_mem(NULL, pDHTab);
+ return;
+ }
+
+ dh_len = sizeof(pDHTab->secu_key);
+ RT_DH_SecretKey_Generate(
+ pDHTab->pub_key, sizeof(pDHTab->pub_key),
+ WPS_DH_P_VALUE, sizeof(WPS_DH_P_VALUE),
+ pDHTab->priv_key, sizeof(pDHTab->priv_key),
+ pDHTab->secu_key, &dh_len);
+
+ wrq->u.data.length = sizeof(DH_TABLE);
+ if (copy_to_user(wrq->u.data.pointer, pDHTab, wrq->u.data.length))
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: copy_to_user() fail\n", __FUNCTION__));
+ }
+
+ os_free_mem(NULL, pDHTab);
+}
+
+VOID Get_Auth_Keywrap_Key(
+ IN RTMP_IOCTL_INPUT_STRUCT *wrq)
+{
+ KDK_KDF_TABLE *pTab = NULL;
+ INT status;
+ UCHAR DHKey[32] = {0};
+ UCHAR KdkInput[38] = {0};
+ UCHAR KDK[32] = {0};
+ UCHAR KdfKey[80] = {0};
+ unsigned char personlization_str[]=\
+ "Wi-Fi Easy and Secure Key Derivation";
+
+ os_alloc_mem(NULL, (UCHAR **)&pTab, sizeof(KDK_KDF_TABLE));
+ if (pTab == NULL)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: Allocate memory fail!!!\n", __FUNCTION__));
+ return;
+ }
+ status = copy_from_user(pTab, wrq->u.data.pointer, wrq->u.data.length);
+ if(status)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: Copy from user error!!!\n", __FUNCTION__));
+ os_free_mem(NULL, pTab);
+ return;
+ }
+
+ RT_SHA256(pTab->DH_Secu_Key, 192, DHKey);
+
+ NdisMoveMemory(&KdkInput[0], pTab->E_Nonce, 16);
+ NdisMoveMemory(&KdkInput[16], pTab->E_Mac_Addr, 6);
+ NdisMoveMemory(&KdkInput[22], pTab->R_Nonce, 16);
+
+ RT_HMAC_SHA256(DHKey, 32, KdkInput, 38, KDK, SHA256_DIGEST_SIZE);
+ WscDeriveKey(KDK, 32, personlization_str, (sizeof(personlization_str) - 1), KdfKey, 640);
+
+ NdisMoveMemory(pTab->AuthKey, &KdfKey[0], 32);
+ NdisMoveMemory(pTab->KeyWrapKey, &KdfKey[32], 16);
+ NdisMoveMemory(pTab->Emsk, &KdfKey[48], 32);
+
+ wrq->u.data.length = sizeof(KDK_KDF_TABLE);
+ if (copy_to_user(wrq->u.data.pointer, pTab, wrq->u.data.length))
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: copy_to_user() fail\n", __FUNCTION__));
+ }
+
+ os_free_mem(NULL, pTab);
+}
+
+VOID Get_KWA_Value(
+ IN RTMP_IOCTL_INPUT_STRUCT *wrq)
+{
+ KWA_TABLE *pKwaTab = NULL;
+ INT status;
+ UCHAR Buf[32];
+
+ os_alloc_mem(NULL, (UCHAR **)&pKwaTab, sizeof(KWA_TABLE));
+ if (pKwaTab == NULL)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: Allocate memory fail!!!\n", __FUNCTION__));
+ return;
+ }
+
+ status = copy_from_user(pKwaTab, wrq->u.data.pointer, wrq->u.data.length);
+ if(status)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: Copy from user error!!!\n", __FUNCTION__));
+ os_free_mem(NULL, pKwaTab);
+ return;
+ }
+
+ RT_HMAC_SHA256(pKwaTab->AuthKey, 32, pKwaTab->EncrptData, pKwaTab->EncrptDataLen,
+ Buf, SHA256_DIGEST_SIZE);
+
+ NdisMoveMemory(pKwaTab->KWA, Buf, 8);
+ wrq->u.data.length = sizeof(KWA_TABLE);
+
+ if (copy_to_user(wrq->u.data.pointer, pKwaTab, wrq->u.data.length))
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: copy_to_user() fail\n", __FUNCTION__));
+ }
+
+ os_free_mem(NULL, pKwaTab);
+}
+
+VOID Get_AES_Encrypt_Value(
+ IN RTMP_IOCTL_INPUT_STRUCT *wrq)
+{
+ AES_TABLE *pAesEnc = NULL;
+ INT status;
+
+ os_alloc_mem(NULL, (UCHAR **)&pAesEnc, sizeof(AES_TABLE));
+ if (pAesEnc == NULL)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: Allocate memory fail!!!\n", __FUNCTION__));
+ return;
+ }
+
+ status = copy_from_user(pAesEnc, wrq->u.data.pointer, wrq->u.data.length);
+ if(status)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: Copy from user error!!!\n", __FUNCTION__));
+ os_free_mem(NULL, pAesEnc);
+ return;
+ }
+
+ AES_CBC_Encrypt(pAesEnc->PlainText, pAesEnc->PlainTextLen, pAesEnc->KeyWrapKey,
+ sizeof(pAesEnc->KeyWrapKey), pAesEnc->IV, 16, (UINT8 *) pAesEnc->CipherText,
+ &(pAesEnc->CipherTextLen));
+
+ wrq->u.data.length = sizeof(AES_TABLE);
+ if (copy_to_user(wrq->u.data.pointer, pAesEnc, wrq->u.data.length))
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: copy_to_user() fail\n", __FUNCTION__));
+ }
+
+ os_free_mem(NULL, pAesEnc);
+}
+
+VOID Get_AES_Decrypt_Value(
+ IN RTMP_IOCTL_INPUT_STRUCT *wrq)
+{
+ AES_TABLE *pAesDec = NULL;
+ INT status;
+
+ os_alloc_mem(NULL, (UCHAR **)&pAesDec, sizeof(AES_TABLE));
+ if (pAesDec == NULL)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: Allocate memory fail!!!\n", __FUNCTION__));
+ return;
+ }
+
+ status = copy_from_user(pAesDec, wrq->u.data.pointer, wrq->u.data.length);
+ if(status)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: Copy from user error!!!\n", __FUNCTION__));
+ os_free_mem(NULL, pAesDec);
+ return;
+ }
+
+ AES_CBC_Decrypt(pAesDec->CipherText, pAesDec->CipherTextLen, pAesDec->KeyWrapKey,
+ sizeof(pAesDec->KeyWrapKey), pAesDec->IV, 16, (UINT8 *) pAesDec->PlainText,
+ (UINT *) &(pAesDec->PlainTextLen));
+
+ wrq->u.data.length = sizeof(AES_TABLE);
+ if (copy_to_user(wrq->u.data.pointer, pAesDec, wrq->u.data.length))
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("%s: copy_to_user() fail\n", __FUNCTION__));
+ }
+
+ os_free_mem(NULL, pAesDec);
+}
+#endif \ No newline at end of file
diff --git a/cleopatre/devkit/mt7601udrv/include/ap_cfg.h b/cleopatre/devkit/mt7601udrv/include/ap_cfg.h
index 81be09272b..7df65ceeee 100644
--- a/cleopatre/devkit/mt7601udrv/include/ap_cfg.h
+++ b/cleopatre/devkit/mt7601udrv/include/ap_cfg.h
@@ -68,6 +68,21 @@ VOID RTMPAPIoctlMAC(
#endif /* DBG */
+#ifdef P1905_AP_AUTO_CONFIGURED
+VOID Get_DH_Pub_Key(
+ IN RTMP_IOCTL_INPUT_STRUCT *wrq);
+VOID Get_DH_Secu_Key(
+ IN RTMP_IOCTL_INPUT_STRUCT *wrq);
+VOID Get_Auth_Keywrap_Key(
+ IN RTMP_IOCTL_INPUT_STRUCT *wrq);
+VOID Get_KWA_Value(
+ IN RTMP_IOCTL_INPUT_STRUCT *wrq);
+VOID Get_AES_Encrypt_Value(
+ IN RTMP_IOCTL_INPUT_STRUCT *wrq);
+VOID Get_AES_Decrypt_Value(
+ IN RTMP_IOCTL_INPUT_STRUCT *wrq);
+#endif
+
VOID RtmpDrvMaxRateGet(
IN VOID *pReserved,
/* IN PHTTRANSMIT_SETTING pHtPhyMode, */
diff --git a/cleopatre/devkit/mt7601udrv/include/oid.h b/cleopatre/devkit/mt7601udrv/include/oid.h
index 6152987c99..15793872b5 100644
--- a/cleopatre/devkit/mt7601udrv/include/oid.h
+++ b/cleopatre/devkit/mt7601udrv/include/oid.h
@@ -1229,7 +1229,42 @@ typedef struct _RT_LLTD_ASSOICATION_TABLE {
#define RT_WSC_UPNP_EVENT_FLAG 0x109
#endif /* WSC_INCLUDED */
-
+#ifdef P1905_AP_AUTO_CONFIGURED
+typedef struct _DH_TABLE {
+ UCHAR pub_key[192];
+ UCHAR priv_key[192];
+ UCHAR secu_key[192];
+} DH_TABLE, *PDH_TABLE;
+
+typedef struct _KDK_KDF_TABLE {
+ UCHAR E_Nonce[16];
+ UCHAR R_Nonce[16];
+ UCHAR E_Mac_Addr[6];
+
+ UCHAR AuthKey[32];
+ UCHAR KeyWrapKey[16];
+ UCHAR Emsk[32];
+
+ UCHAR DH_Secu_Key[192];
+} KDK_KDF_TABLE, *PKDK_KDF_TABLE;
+
+typedef struct _KWA_TABLE {
+ UCHAR AuthKey[32];
+ UCHAR *EncrptData;
+ UINT EncrptDataLen;
+ UCHAR KWA[8];
+} KWA_TABLE, *PKWA_TABLE;
+
+typedef struct _AES_TABLE {
+ UCHAR *PlainText;
+ UINT PlainTextLen;
+ UCHAR IV[16];
+ UCHAR *CipherText;
+ UINT CipherTextLen;
+
+ UCHAR KeyWrapKey[16];
+} AES_TABLE, *PAES_TABLE;
+#endif
/*#define MAX_CUSTOM_LEN 128 */
diff --git a/cleopatre/devkit/mt7601udrv/include/os/rt_os.h b/cleopatre/devkit/mt7601udrv/include/os/rt_os.h
index 3f3b8fc741..872b078dd1 100644
--- a/cleopatre/devkit/mt7601udrv/include/os/rt_os.h
+++ b/cleopatre/devkit/mt7601udrv/include/os/rt_os.h
@@ -78,6 +78,15 @@
#endif/* INF_AR9 */
#define RTPRIV_IOCTL_SET_WSCOOB (SIOCIWFIRSTPRIV + 0x19)
#define RTPRIV_IOCTL_WSC_CALLBACK (SIOCIWFIRSTPRIV + 0x1A)
+
+#ifdef P1905_AP_AUTO_CONFIGURED
+#define RTPRIV_IOCTL_GET_DH_PUB_KEY (SIOCIWFIRSTPRIV + 0x1B)
+#define RTPRIV_IOCTL_GET_DH_SECU_KEY (SIOCIWFIRSTPRIV + 0x1C)
+#define RTPRIV_IOCTL_GET_AUTH_KEYWRAP_KEY (SIOCIWFIRSTPRIV + 0x1D)
+#define RTPRIV_IOCTL_GET_KWA_VALUE (SIOCIWFIRSTPRIV + 0x1E)
+#define RTPRIV_IOCTL_GET_AES_ENCRYPT_VALUE (SIOCIWFIRSTPRIV + 0x14)
+#define RTPRIV_IOCTL_GET_AES_DECRYPT_VALUE (SIOCIWFIRSTPRIV + 0x15)
+#endif
#endif /* CONFIG_AP_SUPPORT */
#endif /* _RT_OS_H_ */
diff --git a/cleopatre/devkit/mt7601udrv/include/rtmp_cmd.h b/cleopatre/devkit/mt7601udrv/include/rtmp_cmd.h
index 98839563c2..7cae923051 100644
--- a/cleopatre/devkit/mt7601udrv/include/rtmp_cmd.h
+++ b/cleopatre/devkit/mt7601udrv/include/rtmp_cmd.h
@@ -126,6 +126,14 @@ typedef enum _CMD_RTPRIV_IOCTL_AP {
CMD_RTPRIV_IOCTL_AP_SIOCGIWRATEQ,
CMD_RTPRIV_IOCTL_AP_SIOCSIWGENIE,
+ /* p1905.1 ap auto configured*/
+ CMD_RTPRIV_IOCTL_GET_DH_PUB_KEY,
+ CMD_RTPRIV_IOCTL_GET_DH_SECU_KEY,
+ CMD_RTPRIV_IOCTL_GET_AUTH_KEYWRAP_KEY,
+ CMD_RTPRIV_IOCTL_GET_KWA_VALUE,
+ CMD_RTPRIV_IOCTL_GET_AES_ENCRYPT_VALUE,
+ CMD_RTPRIV_IOCTL_GET_AES_DECRYPT_VALUE,
+
/* can not exceed 0x5000 */
} CMD_RTPRIV_IOCTL_AP;
diff --git a/cleopatre/devkit/mt7601udrv/os/linux/ap_ioctl.c b/cleopatre/devkit/mt7601udrv/os/linux/ap_ioctl.c
index b2aad0d8bb..92bf80d41e 100644
--- a/cleopatre/devkit/mt7601udrv/os/linux/ap_ioctl.c
+++ b/cleopatre/devkit/mt7601udrv/os/linux/ap_ioctl.c
@@ -411,6 +411,27 @@ INT rt28xx_ap_ioctl(
break;
#endif /* DBG */
+#ifdef P1905_AP_AUTO_CONFIGURED
+ case RTPRIV_IOCTL_GET_DH_PUB_KEY:
+ RTMP_AP_IoctlHandle(pAd, wrq, CMD_RTPRIV_IOCTL_GET_DH_PUB_KEY, 0, NULL, 0);
+ break;
+ case RTPRIV_IOCTL_GET_DH_SECU_KEY:
+ RTMP_AP_IoctlHandle(pAd, wrq, CMD_RTPRIV_IOCTL_GET_DH_SECU_KEY, 0, NULL, 0);
+ break;
+ case RTPRIV_IOCTL_GET_AUTH_KEYWRAP_KEY:
+ RTMP_AP_IoctlHandle(pAd, wrq, CMD_RTPRIV_IOCTL_GET_AUTH_KEYWRAP_KEY, 0, NULL, 0);
+ break;
+ case RTPRIV_IOCTL_GET_KWA_VALUE:
+ RTMP_AP_IoctlHandle(pAd, wrq, CMD_RTPRIV_IOCTL_GET_KWA_VALUE, 0, NULL, 0);
+ break;
+ case RTPRIV_IOCTL_GET_AES_ENCRYPT_VALUE:
+ RTMP_AP_IoctlHandle(pAd, wrq, CMD_RTPRIV_IOCTL_GET_AES_ENCRYPT_VALUE, 0, NULL, 0);
+ break;
+ case RTPRIV_IOCTL_GET_AES_DECRYPT_VALUE:
+ RTMP_AP_IoctlHandle(pAd, wrq, CMD_RTPRIV_IOCTL_GET_AES_DECRYPT_VALUE, 0, NULL, 0);
+ break;
+#endif
+
default:
/* DBGPRINT(RT_DEBUG_ERROR, ("IOCTL::unknown IOCTL's cmd = 0x%08x\n", cmd)); */
Status = RTMP_IO_EOPNOTSUPP;
diff --git a/cleopatre/devkit/mt7601udrv/os/linux/config.mk b/cleopatre/devkit/mt7601udrv/os/linux/config.mk
index 87b00d5cf6..a95ef2fed2 100644
--- a/cleopatre/devkit/mt7601udrv/os/linux/config.mk
+++ b/cleopatre/devkit/mt7601udrv/os/linux/config.mk
@@ -199,6 +199,9 @@ HAS_MICROWAVE_OVEN_SUPPORT=n
HAS_WIFI_P2P_CONCURRENT_FAST_SCAN=n
+#support IEEE1905.1 for MStar PLC
+HAS_P1905_AP_AUTO_CONFIGURED=y
+HAS_P1905_LINK_METRICS=y
#################################################
CC := $(CROSS_COMPILE)gcc
@@ -408,6 +411,13 @@ ifeq ($(HAS_TXRX_SW_ANTDIV_SUPPORT),y)
WFLAGS += -DTXRX_SW_ANTDIV_SUPPORT
endif
+ifeq ($(HAS_P1905_AP_AUTO_CONFIGURED),y)
+WFLAGS += -DP1905_AP_AUTO_CONFIGURED
+endif
+
+ifeq ($(HAS_P1905_LINK_METRICS),y)
+WFLAGS += -DP1905_LINK_METRICS
+endif
endif #// endif of RT2860_MODE == AP //